package com.mall.goods.common.helper;

import com.mall.goods.common.repository.LogRepository;
import jakarta.annotation.Resource;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 *后台操作日志辅助类
 * @author yangfei
 */
@Slf4j
@Component
public class AdminLogHelper {

//    @Resource
//    private AdminLogMapper adminLogMapper;

    //问题：如果 AdminLogHelper 在 common 模块中，而 AdminLogMapper 在 domain 模块中， common 模块无法直接依赖 domain 模块
    //解决方案：通过接口解耦
    //1.在 common 模块中定义 Mapper 接口，创建一个通用的接口（ LogRepository ），用于解耦
    //2.在 domain 模块中实现接口，在 domain 模块中实现该接口，并注入 MyBatis 的 AdminLogMapper
    //3.修改 AdminLogHelper 依赖接口，让 AdminLogHelper 依赖 LogRepository 而非具体的 AdminLogMapper

    @Resource
    private LogRepository logRepository;

    /**
     * 记录日志
     * @author yangfei
     */
    public void log(String content, ServletRequest request){
        try{
            log(content,ShopHelper.getAddressIP((HttpServletRequest) request) );
        }catch (Exception e){
            log.error("记录日志失败",e);
        }
    }

    /**
     * 记录日志
     * @author yangfei
     */
    public void log(String content){
        try{
            log(content,ShopHelper.getAddressIP() );
        }catch (Exception e){
            log.error("记录日志失败",e);
        }    }

    /**
     * 记录日志
     * @author yangfei
     */
    private void log(String content,String ip){
        log.info("准备记录日志内容:{}",content);
        log.info("准备记录日志IP:{}",ip);
       logRepository.log(content,ip);
    }


}
